iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Software Development

PHP 語法通關系列 第 14

Day14 流程控制之迴圈

  • 分享至 

  • xImage
  •  

循環 -- 就是讓電腦重複執行一件事!
而迴圈簡單來說就是在條件符合的情況下,重複執行某段程式碼。
常用的loop指令有:while、for、do while等。
大部分的分支和迴圈結構都是由布林值(boolean)判斷式來控制的,也就是true或false。

迴圈控制

『迴圈控制』就是用來處理需要重覆執行的程式碼,迴圈都可以經過適當的修改換個邏輯來彼此轉換,因此要使用哪一個方式來撰寫迴圈控制並沒有一定的標準,自己用習慣,程式設計人員認為寫得出要的東西即可。

  • while
  • do while
  • for

1. while循環

注意:書寫循環結構時一般都需要自增或者自減條件。

while(條件表達的){
      //循環體
      php代碼
      [自增或者自減得條件]
      }

例子:

<?php
// 1. 輸出1~100的累加和
// 1 + 2 + 3 + 4 + 5 …… 100 = 5050
$total = 0;
$num = 1;
while ($num <= 100) {
    //求1-100的累加和
    //$total += $num;
    $total = $total + $num;
    $num++;
}

echo $total;

2. do...while循環

首先會執行一次代碼,然後檢查條件,如果指定條件為真,則重複循環表達式的值,注意是在每次循環結束時檢查而不是開始時~

    - do{
      循環體
      [自增自減條件]
      }while(條件表達式);
  • do...while 和 while循環的區別
    1. while型循環的每一次循環體的執行都要依據while條件表達式的結果進行約束
    2. do...while除了第一次之外,剩下每次的循環體的執行都要受while條件表達式結果的約束
<?php
//循環 
//01 02 03 04 05 06 07 08 09 10
//11 12 13					 20

//41 42						 50

$num = 1;
do {
    if ($num < 10) {
        //加前導0
        echo '0' . $num . ' ';
    } else {
        //正常輸出
        echo $num . ' ';
    }

    //判斷10的倍數換行
    if ($num % 10 == 0) {
        echo '<br/>';
    }
    $num++;
} while ($num <= 50);

for循環

計數型循環(效率高),從開始就知道自己要循環多少次

   for(表達式1;表達式2,表達式3){
       循環體(PHP語句)
   }
表達式1 表示初始化變量
表達式2 表示循環退出的條件(條件表達式)
表達式3 自增自減條件
  • for循環執行格式

    1. 執行表達式1 對變量初始化。
    2. 執行表達式2 判斷是否符合循環條件。
    3. 如果表達式2 符合執行循環的條件,那麼就執行{}內的代碼(循環體)
    4. 執行表達式3 自增或者自減條件
    5. 執行表達式2 判斷是否符合循環條件
  • for循環和while循環的區別:

    1. 類型問題
      • 計數型循環:for循環
      • 布爾值循環:while循環、do...while循環以及foreach循環
    2. 效率問題
      • for循環要高於while循環,for循環屬於計數型循環,而while循環數bool型循環
	for($i = 0;$i < 10; $i++){
		echo $i;
	}

之前寫的小練習,用到一點html、css,不過不難,可以看一下,還有之後會介紹到的函數~

<?php
//製作10行10列的表格,每行隨機變換顏色 每秒鐘自動變換顏色
echo '<meta http-equiv="refresh" content="1" />';
echo '<table border="1" align="center" width="800">';
for ($tr = 0; $tr < 10; $tr++) {
    echo '<tr style="background:rgb('
        . mt_rand(0, 255) . ',' . mt_rand(0, 255) . ',' . mt_rand(0, 255) . ')">';
    for ($td = 0; $td < 10; $td++) {
        echo '<td>' . $tr . $td . '</td>';
    }
    echo '</tr>';
}
echo '</table>';

流程控制的其它語句

  1. break語句
  • 作用:跳出流程控制區塊,在任何循環結構中用break終止分支結構、循環操作
  • 注意:break後面可以跟數值參數,break 1 表示的意思跟break一樣。如果在循環中設置break 2 表示用來終止兩層循環~

例子:

	for($br = 0; $br < 10; $br ++){
		echo $br.'<br/>';
		if($br == 4){
			break 1;
		}

	}


這邊本來要到9,但因為等於4我就break跳出迴圈,所以就沒有繼續輸出囉~

  1. continue語句
  • 作用:不執行接下來在區塊內的程式碼,直接跳回區塊的開頭再執行一次,在循環結構中用來終止本次循環,開始下一次循環。
  • 注意:continue後面可以跟數值參數,continue 1 表示的意思和continue一樣,如果在循環中設置 continue 2 表示跳轉到外層繼續循環
<?php
// continue 

for ($i = 0; $i < 10; $i++) {

	if ($i == 4) {
		continue;
	}
	echo $i . '<br/>'; // 0  1 2 3 5
}

echo '<hr>';

for ($i = 0; $i < 10; $i++) {
	for ($j = 0; $j < 10; $j++) {
		if ($j == 4) {
			continue 2;
		}
		echo $j . '<br/>';
	}
	echo '<br/>';
}

可以自己跑一下~~ 看一下結果,太長了我就不截圖了=ˇ=

  1. goto語句
  • goto 操作符用來跳轉到程序中的另一個位置,該目標位置可以用目標名稱加上冒號來標記,而跳轉指令是goto 之後接上目標位置的標記即可。
    簡單來說,可以在離開控制區塊後,直接跳到某個標記處開始往下執行
  • PHP中的goto 有一定的限制,目標位置只能位於同一個文件和作用域、也就是說無法跳出一個函數或者類,也無法跳入到另一個函數。也無法跳入到任何的循環或者switch結構中,可以跳出循環或者switch,通常的用法是用goto代替多層的break;

PS.了解就好了~~ 比較少用,老實說,我也不太會 (´−`) ンー

Day14 Winnie的聊天室

耶耶耶,今天介紹完了~~ 流程控制到一個段落,然後我發現,我前面的array數組單元,沒有介紹到 foreach(), foreach()迴圈用於遍歷陣列中的每個元素www
趕快在閒聊中補!起!來!

  • count() 統計數組的長度(元素個數)
    參數:要統計數組長度的數組變量
    返回值:返回該數組的元素個數
  • 遍歷數組方式:數組專用格式foreach
   - 格式1: 遍歷數組 同時獲取鍵和值
     foreach(數組變量 as 鍵變量=>值變量){
       循環體
     }
   - 格式2: 遍歷數組 只獲取值
     foreach(數組變量 as 值變量){
       循環體
     }

例子:

<?php
//關聯數組
$arr = array('id' => 1, 'name' => 'Winnie', 'age' => 'unknow', 'sex' => 1);
var_dump($arr);

//方式1
// $len = count($arr);
// for($i = 0; $i < $len; $i ++){
// 	var_dump($i);
// 	echo $arr[$i];
// }

//方式2
foreach ($arr as $k => $v) {
    var_dump($k); //出來的是key
    var_dump($v); //出來的是value,也就是winnie、unknow這些值~~
}

耶耶耶~~ 把缺的補上了,今天的聊天真充實阿!٩(✿∂‿∂✿)۶


上一篇
Day13 流程控制之條件判斷
下一篇
Day15 PHP函數介紹
系列文
PHP 語法通關30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言